home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / APPEXPRT.PAK / TDIALOG.OWL < prev    next >
Text File  |  1997-05-06  |  7KB  |  254 lines

  1. '------------------------------------------------------------------------------
  2. '   Expert - (C) Copyright 1993, 1995 by Borland International, Inc.
  3. '                All Rights Reserved.
  4. '
  5. '   SUBSYSTEM:    OWL code template
  6. '   FILE:         TDialog.OWL
  7. '
  8. '
  9. '   OVERVIEW
  10. '   ~~~~~~~~
  11. '   Definition of all OWL classes when can be generated by  the CODEGEN phase of
  12. '   AppGen and ClassExpert.  AppGen generates when all options have been selected
  13. '   and multiple classes are generated.  ClassExpert uses the CODEGEN phase when
  14. '   a new class is generated.
  15. '------------------------------------------------------------------------------
  16.  
  17. <<[H]TDialog [[TDialog]]
  18. ##{hheader.snp}
  19. #include <owl/static.h>
  20.  
  21. ##<<TApplication QUERY_FILENAME_CPP [[Filename]]
  22. #include "[[Filename]].rh"                  // Definition of all resources.
  23.  
  24.  
  25. //{{TDialog = [[TDialog]]}}
  26. class [[TDialog]] : public TDialog {
  27.   public:
  28. ##QUERY_DLOG [[DLogRsrc]]
  29.     [[TDialog]](TWindow* parent, TResId resId = [[DLogRsrc]], TModule* module = 0);
  30.     virtual ~[[TDialog]]();
  31.  
  32. //{{[[TDialog]]VIRTUAL_BEGIN}}
  33.   public:
  34.     void SetupWindow();
  35. ##:DBVirtual(\\"[[TDialog]]", "SetupWindow")
  36. //{{[[TDialog]]VIRTUAL_END}}
  37. };    //{{[[TDialog]]}}
  38.  
  39.  
  40. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  41. // Reading the VERSIONINFO resource.
  42. //
  43. class TProjectRCVersion {
  44.   public:
  45.     TProjectRCVersion(TModule* module);
  46.     virtual ~TProjectRCVersion();
  47.  
  48.     bool GetProductName(LPSTR& prodName);
  49.     bool GetProductVersion(LPSTR& prodVersion);
  50.     bool GetCopyright(LPSTR& copyright);
  51.     bool GetDebug(LPSTR& debug);
  52.  
  53.   protected:
  54.     uint8 far*  TransBlock;
  55.     void far*   FVData;
  56.  
  57.   private:
  58. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  59.     // Don't allow this object to be copied.
  60.     //
  61.     TProjectRCVersion(const TProjectRCVersion&);
  62.     TProjectRCVersion& operator = (const TProjectRCVersion&);
  63. };
  64. ##{hfooter.snp}
  65. >>[H]TDialog [[TDialog]]
  66.  
  67.  
  68. '
  69. ' TDialog CPP file.
  70. '
  71. <<[CPP]TDialog [[TDialog]]
  72. ##{cheader.snp}
  73. #include <owl/pch.h>
  74. #include <stdio.h>
  75. #if defined(BI_PLAT_WIN16)
  76. # include <ver.h>
  77. #endif
  78.  
  79. ##<<TApplication QUERY_FILE_H [[FileName]]
  80. #include "[[FileName]]"
  81. ##QUERY_FILE_H [[FileName]]
  82. #include "[[FileName]]"
  83.  
  84.  
  85. TProjectRCVersion::TProjectRCVersion(TModule* module)
  86. {
  87.   uint32  fvHandle;
  88.   uint    vSize;
  89.   char    appFName[255];
  90.   TAPointer<char> subBlockName = new char[255];
  91.  
  92.   FVData = 0;
  93.  
  94.   module->GetModuleFileName(appFName, sizeof appFName);
  95.   OemToAnsi(appFName, appFName);
  96.   uint32 dwSize = ::GetFileVersionInfoSize(appFName, &fvHandle);
  97.   if (dwSize) {
  98.     FVData  = (void far *)new char[(uint)dwSize];
  99.     if (::GetFileVersionInfo(appFName, fvHandle, dwSize, FVData)) {
  100.       // Copy string to buffer so if the -dc compiler switch(Put constant strings in code segments)
  101.       // is on VerQueryValue will work under Win16.  This works around a problem in Microsoft's ver.dll
  102.       // which writes to the string pointed to by subBlockName.
  103.       //
  104.       strcpy(subBlockName, "\\VarFileInfo\\Translation");
  105.       if (!::VerQueryValue(FVData, subBlockName,(void far* far*)&TransBlock, &vSize)) {
  106.         delete[] FVData;
  107.         FVData = 0;
  108.       }
  109.       else
  110.         // Swap the words so sprintf will print the lang-charset in the correct format.
  111.         //
  112.         *(uint32 *)TransBlock = MAKELONG(HIWORD(*(uint32 *)TransBlock), LOWORD(*(uint32 *)TransBlock));
  113.     }
  114.   }
  115. }
  116.  
  117.  
  118. TProjectRCVersion::~TProjectRCVersion()
  119. {
  120.   if (FVData)
  121.     delete[] FVData;
  122. }
  123.  
  124.  
  125. bool TProjectRCVersion::GetProductName(LPSTR& prodName)
  126. {
  127.   uint    vSize;
  128.   TAPointer<char> subBlockName = new char[255];
  129.  
  130.   if (FVData) {
  131.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"ProductName");
  132.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)&prodName, &vSize) : false;
  133.   } else
  134.     return false;
  135. }
  136.  
  137.  
  138. bool TProjectRCVersion::GetProductVersion(LPSTR& prodVersion)
  139. {
  140.   uint    vSize;
  141.   TAPointer<char> subBlockName = new char[255];
  142.  
  143.   if (FVData) {
  144.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"ProductVersion");
  145.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)&prodVersion, &vSize) : false;
  146.   } else
  147.     return false;
  148. }
  149.  
  150.  
  151. bool TProjectRCVersion::GetCopyright(LPSTR& copyright)
  152. {
  153.   uint    vSize;
  154.   TAPointer<char> subBlockName = new char[255];
  155.  
  156.   if (FVData) {
  157.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"LegalCopyright");
  158.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)©right, &vSize) : false;
  159.   } else
  160.     return false;
  161. }
  162.  
  163.  
  164. bool TProjectRCVersion::GetDebug(LPSTR& debug)
  165. {
  166.   uint    vSize;
  167.   TAPointer<char> subBlockName = new char[255];
  168.  
  169.   if (FVData) {
  170.     sprintf(subBlockName, "\\StringFileInfo\\%08lx\\%s", *(uint32 *)TransBlock,(LPSTR)"SpecialBuild");
  171.     return FVData ? ::VerQueryValue(FVData, subBlockName,(void far* far*)&debug, &vSize) : false;
  172.   } else
  173.     return false;
  174. }
  175.  
  176.  
  177. //{{[[TDialog]] Implementation}}
  178.  
  179.  
  180. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  181. //--------------------------------------------------------
  182. // [[TDialog]]
  183. // ~~~~~~~~~~
  184. // Construction/Destruction handling.
  185. //
  186. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  187. [[TDialog]]::[[TDialog]](TWindow* parent, TResId resId, TModule* module)
  188. :
  189.   TDialog(parent, resId, module)
  190. {
  191.   // INSERT>> Your constructor code here.
  192. }
  193.  
  194.  
  195. [[TDialog]]::~[[TDialog]]()
  196. {
  197.   Destroy();
  198.  
  199.   // INSERT>> Your destructor code here.
  200. }
  201.  
  202.  
  203. void [[TDialog]]::SetupWindow()
  204. {
  205.   LPSTR prodName = 0, prodVersion = 0, copyright = 0, debug = 0;
  206.  
  207. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  208.   // Get the static text for the value based on VERSIONINFO.
  209.   //
  210.   TStatic* versionCtrl = new TStatic(this, IDC_VERSION, 255);
  211.   TStatic* copyrightCtrl = new TStatic(this, IDC_COPYRIGHT, 255);
  212.   TStatic* debugCtrl = new TStatic(this, IDC_DEBUG, 255);
  213.  
  214.   TDialog::SetupWindow();
  215.  
  216. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  217.   // Process the VERSIONINFO.
  218.   //
  219.   TProjectRCVersion applVersion(GetModule());
  220.  
  221. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  222.   // Get the product name and product version strings.
  223.   //
  224.   if (applVersion.GetProductName(prodName) && applVersion.GetProductVersion(prodVersion)) {
  225. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  226.     // IDC_VERSION is the product name and version number, the initial value of IDC_VERSION is
  227.     // the word Version(in whatever language) product name VERSION product version.
  228.     //
  229.     char buffer[255];
  230.     char versionName[128];
  231.  
  232.     buffer[0] = '\0';
  233.     versionName[0] = '\0';
  234.  
  235.     versionCtrl->GetText(versionName, sizeof versionName);
  236.     sprintf(buffer, "%s %s %s", prodName, versionName, prodVersion);
  237.  
  238.     versionCtrl->SetText(buffer);
  239.   }
  240.  
  241. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  242.   // Get the legal copyright string.
  243.   //
  244.   if (applVersion.GetCopyright(copyright))
  245.     copyrightCtrl->SetText(copyright);
  246.  
  247. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  248.   // Only get the SpecialBuild text if the VERSIONINFO resource is there.
  249.   //
  250.   if (applVersion.GetDebug(debug))
  251.     debugCtrl->SetText(debug);
  252. }
  253. >>[CPP]TDialog [[TDialog]]
  254.